home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Games of Daze
/
Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso
/
djgpp
/
utils
/
install
/
diskutil.h
< prev
next >
Wrap
C/C++ Source or Header
|
1993-11-21
|
2KB
|
123 lines
int mmkdir(char *dir)
{
char *cp, *cp2, c;
int rv;
struct ffblk f;
struct stat s;
if (dir[1] == ':' && dir[2] == 0)
return 0;
if (stat(dir, &s))
{
if (access(dir, 0) == 0)
return 0;
}
else
{
if ((s.st_mode & S_IFMT) == S_IFDIR)
return 0;
return 1;
}
rv = mkdir(dir);
if (rv == 0)
return 0;
if (errno == EACCES)
return 1;
cp = 0;
for (cp2=dir; *cp2; cp2++)
if (*cp2=='\\' || *cp2=='/')
cp = cp2;
if (cp == 0)
return 1;
c = *cp;
*cp = 0;
rv = mmkdir(dir);
*cp = c;
if (rv)
return 1;
return mkdir(dir);
}
char *kb(long b)
{
static char buf[20];
char *suf = "K";
if (b < 1000)
{
sprintf(buf, "%5ld", b);
return buf;
}
if (b > 1000000L)
{
b /= 1000;
suf = "M";
}
if (b < 10000L)
sprintf(buf, "%ld.%02ld%s", b/1000, b%1000/10, suf);
else if (b < 100000L)
sprintf(buf, "%ld.%01ld%s", b/1000, b%1000/100, suf);
else
sprintf(buf, "%4ld%s", b/1000, suf);
return buf;
}
long show_free_space()
{
int drive = 0;
struct dfree dtable;
char dletter;
long fr;
if (install_dir[1] == ':')
{
drive = install_dir[0] & 0x1f;
dletter = drive + '@';
}
else
dletter = getdisk() + 'A';
getdfree(drive, &dtable);
fr = (long)dtable.df_avail * dtable.df_bsec * dtable.df_sclus;
printf("Disk %s%c:%s has %s%s%s available.\n",
ansibold, dletter, ansinorm, ansibold, kb(fr), ansinorm);
return fr;
}
long copyfile(char *src, char *dest)
{
int destf, srcf, rd;
long copied = 0;
char buf[4096];
srcf = _open(src, O_RDONLY);
if (srcf < 0)
{
printf("Cannot open %s for reading\n", src);
exit(1);
}
destf = _creat(dest, 0);
if (destf < 0)
{
printf("Cannot open %s for writing\n", dest);
perror("The error was");
exit(1);
}
while ((rd = read(srcf, buf, 4096)) > 0)
{
write(destf, buf, rd);
copied += rd;
}
close(srcf);
close(destf);
return copied;
}